import { defineStore } from 'pinia';
import Cookies from 'js-cookie';
import { Session } from '/@/utils/storage';
import { router } from '/@/router';
import { ElMessage } from 'element-plus';

/**
 * 用户信息
 * @methods setUserInfos 设置用户信息
 * @methods clearUserInfos 清除用户信息
 */
export const useUserInfo = defineStore('userInfo', {
	state: () => ({
		userInfos: {
			id: 0,
			img: '',
			account: '',
			name: '',
			roles: ['admin'], // 添加 roles 属性以匹配类型定义
		},
		url: '',
		menuList: [],
	}),
	actions: {
		setUserInfos(data: any) {
			// 存储用户信息到浏览器缓存
			this.$patch((state) => {
				// 添加默认值和类型检查
				const userInfo = data && data.info ? data.info : {};
				const url = data && data.url ? data.url : '/';
				const list = data && data.list ? data.list : [];
				
				// 重点：统一处理头像路径userInfo.img 
				let avatarImg = userInfo.img || '';
				if (avatarImg) {
					// 处理相对路径（如果后端返回的是相对路径，拼接基础URL）
					if (!avatarImg.startsWith('http://') && !avatarImg.startsWith('https://') && !avatarImg.startsWith('/')) {
						// 假设你的后端图片基础路径是 /api/file 或 CDN 地址
						avatarImg = import.meta.env.VITE_APP_BASE_API + '/file/' + avatarImg;
					}
				}

				state.userInfos = {
					...userInfo,
					img: avatarImg, // 存储处理后的完整路径
					roles: userInfo.roles || (userInfo.account === 'admin' ? ['admin'] : ['common']),
				};
				state.url = url;
				state.menuList = list;
			});
		},
		clearUserInfos() {
			// 清除用户信息
			this.$patch((state) => {
				state.userInfos = {
					id: 0,
					img: '',
					account: '',
					name: '',
					roles: ['admin'],
				};
				state.url = '';
				state.menuList = [];
			});
		},
		// 检查token有效性
		async checkTokenValidity() {
			const token = Session.get('token');
			if (!token) {
				// 如果没有token，直接跳转到登录页
				this.clearUserInfos();
				Session.clear();
				ElMessage.error('请先登录');
				router.push('/login');
				return false;
			}

			// 这里可以添加实际的token验证逻辑
			// 例如调用后端API验证token是否仍然有效
			try {
				// 示例：调用验证token的API
				// const response = await fetch('/api/verify-token', {
				//   method: 'POST',
				//   headers: {
				//     'Authorization': `Bearer ${token}`
				//   }
				// });
				//
				// if (!response.ok) {
				//   throw new Error('Token无效');
				// }

				// 为简化示例，这里假设token有效
				return true;
			} catch (error) {
				// token无效，清除用户信息并跳转到登录页
				this.clearUserInfos();
				Session.clear();
				ElMessage.error('登录已过期，请重新登录');
				router.push('/login');
				return false;
			}
		},
	},
});
